package com.yupi.yuoj.model.vo;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yupi.yuoj.model.entity.Content;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import lombok.Data;
import org.springframework.beans.BeanUtils;

/**
 * 内容视图
 *
 * @author jingjin
 */
@Data
public class ContentVO implements Serializable {

    private final static Gson GSON = new Gson();

    /**
     * id
     */
    private Long id;

    /**
     * 标题
     */
    private String title;

    /**
     * 描述
     */
    private String description;

    /**
     * 内容
     */
    private String content;

    /**
     * 内容类型（video-视频, article-文章, course-课程）
     */
    private String type;

    /**
     * 分类
     */
    private String category;

    /**
     * 标签列表
     */
    private List<String> tagList;

    /**
     * 图片链接
     */
    private String imageUrl;

    /**
     * 视频链接
     */
    private String videoUrl;

    /**
     * 时长（分钟）
     */
    private Integer duration;

    /**
     * 难度等级（1-简单, 2-中等, 3-困难）
     */
    private Integer difficulty;

    /**
     * 点赞数
     */
    private Integer likeNum;

    /**
     * 收藏数
     */
    private Integer collectionNum;

    /**
     * 观看数
     */
    private Integer viewNum;

    /**
     * 状态（0-草稿, 1-已发布, 2-已下架）
     */
    private Integer status;

    /**
     * 创建用户 id
     */
    private Long userId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建用户信息
     */
    private UserVO user;

    /**
     * 是否已点赞
     */
    private Boolean hasLiked;

    /**
     * 是否已收藏
     */
    private Boolean hasCollected;

    /**
     * 包装类转对象
     *
     * @param contentVO
     * @return
     */
    public static Content voToObj(ContentVO contentVO) {
        if (contentVO == null) {
            return null;
        }
        Content content = new Content();
        BeanUtils.copyProperties(contentVO, content);
        List<String> tagList = contentVO.getTagList();
        if (tagList != null) {
            content.setTags(GSON.toJson(tagList));
        }
        return content;
    }

    /**
     * 对象转包装类
     *
     * @param content
     * @return
     */
    public static ContentVO objToVo(Content content) {
        if (content == null) {
            return null;
        }
        ContentVO contentVO = new ContentVO();
        BeanUtils.copyProperties(content, contentVO);
        
        // 处理tags字段
        Object tags = content.getTags();
        if (tags != null) {
            String tagsStr = tags instanceof String ? (String) tags : GSON.toJson(tags);
            List<String> tagList = GSON.fromJson(tagsStr, new TypeToken<List<String>>() {
            }.getType());
            contentVO.setTagList(tagList);
        }
        
        return contentVO;
    }

    private static final long serialVersionUID = 1L;
}